{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Characters, words and lexical diversity\n",
    "\n",
    "In this recipe, we are going to capture text complexity by creating very simple features that:\n",
    "\n",
    "- count the number of characters\n",
    "- count the number of words in the text\n",
    "- count the number of unique words\n",
    "- determine the lexical diversity\n",
    "- determine the average word size"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "\n",
    "from sklearn.datasets import fetch_20newsgroups"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>text</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>From: lerxst@wam.umd.edu (where's my thing)\\nS...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>From: guykuo@carson.u.washington.edu (Guy Kuo)...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>From: twillis@ec.ecn.purdue.edu (Thomas E Will...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>From: jgreen@amber (Joe Green)\\nSubject: Re: W...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>From: jcm@head-cfa.harvard.edu (Jonathan McDow...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                text\n",
       "0  From: lerxst@wam.umd.edu (where's my thing)\\nS...\n",
       "1  From: guykuo@carson.u.washington.edu (Guy Kuo)...\n",
       "2  From: twillis@ec.ecn.purdue.edu (Thomas E Will...\n",
       "3  From: jgreen@amber (Joe Green)\\nSubject: Re: W...\n",
       "4  From: jcm@head-cfa.harvard.edu (Jonathan McDow..."
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# load text data\n",
    "data = fetch_20newsgroups(subset='train')\n",
    "df = pd.DataFrame(data.data, columns=['text'])\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "From: guykuo@carson.u.washington.edu (Guy Kuo)\n",
      "Subject: SI Clock Poll - Final Call\n",
      "Summary: Final call for SI clock reports\n",
      "Keywords: SI,acceleration,clock,upgrade\n",
      "Article-I.D.: shelley.1qvfo9INNc3s\n",
      "Organization: University of Washington\n",
      "Lines: 11\n",
      "NNTP-Posting-Host: carson.u.washington.edu\n",
      "\n",
      "A fair number of brave souls who upgraded their SI clock oscillator have\n",
      "shared their experiences for this poll. Please send a brief message detailing\n",
      "your experiences with the procedure. Top speed attained, CPU rated speed,\n",
      "add on cards and adapters, heat sinks, hour of usage per day, floppy disk\n",
      "functionality with 800 and 1.4 m floppies are especially requested.\n",
      "\n",
      "I will be summarizing in the next two days, so please add to the network\n",
      "knowledge base if you have done the clock upgrade and haven't answered this\n",
      "poll. Thanks.\n",
      "\n",
      "Guy Kuo <guykuo@u.washington.edu>\n",
      "\n"
     ]
    }
   ],
   "source": [
    "print(df[\"text\"][1])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Counting number of characters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>text</th>\n",
       "      <th>num_char</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>From: lerxst@wam.umd.edu (where's my thing)\\nS...</td>\n",
       "      <td>721</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>From: guykuo@carson.u.washington.edu (Guy Kuo)...</td>\n",
       "      <td>858</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>From: twillis@ec.ecn.purdue.edu (Thomas E Will...</td>\n",
       "      <td>1981</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>From: jgreen@amber (Joe Green)\\nSubject: Re: W...</td>\n",
       "      <td>815</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>From: jcm@head-cfa.harvard.edu (Jonathan McDow...</td>\n",
       "      <td>1120</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                text  num_char\n",
       "0  From: lerxst@wam.umd.edu (where's my thing)\\nS...       721\n",
       "1  From: guykuo@carson.u.washington.edu (Guy Kuo)...       858\n",
       "2  From: twillis@ec.ecn.purdue.edu (Thomas E Will...      1981\n",
       "3  From: jgreen@amber (Joe Green)\\nSubject: Re: W...       815\n",
       "4  From: jcm@head-cfa.harvard.edu (Jonathan McDow...      1120"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['num_char'] = df['text'].str.len()\n",
    "\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>text</th>\n",
       "      <th>num_char</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>From: lerxst@wam.umd.edu (where's my thing)\\nS...</td>\n",
       "      <td>716</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>From: guykuo@carson.u.washington.edu (Guy Kuo)...</td>\n",
       "      <td>857</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>From: twillis@ec.ecn.purdue.edu (Thomas E Will...</td>\n",
       "      <td>1980</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>From: jgreen@amber (Joe Green)\\nSubject: Re: W...</td>\n",
       "      <td>814</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>From: jcm@head-cfa.harvard.edu (Jonathan McDow...</td>\n",
       "      <td>1117</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                text  num_char\n",
       "0  From: lerxst@wam.umd.edu (where's my thing)\\nS...       716\n",
       "1  From: guykuo@carson.u.washington.edu (Guy Kuo)...       857\n",
       "2  From: twillis@ec.ecn.purdue.edu (Thomas E Will...      1980\n",
       "3  From: jgreen@amber (Joe Green)\\nSubject: Re: W...       814\n",
       "4  From: jcm@head-cfa.harvard.edu (Jonathan McDow...      1117"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# same but removing trailing white spaces\n",
    "df['num_char'] = df['text'].str.strip().str.len()\n",
    "\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Counting number of words"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['From:',\n",
       " 'guykuo@carson.u.washington.edu',\n",
       " '(Guy',\n",
       " 'Kuo)',\n",
       " 'Subject:',\n",
       " 'SI',\n",
       " 'Clock',\n",
       " 'Poll',\n",
       " '-',\n",
       " 'Final',\n",
       " 'Call',\n",
       " 'Summary:',\n",
       " 'Final',\n",
       " 'call',\n",
       " 'for',\n",
       " 'SI',\n",
       " 'clock',\n",
       " 'reports',\n",
       " 'Keywords:',\n",
       " 'SI,acceleration,clock,upgrade',\n",
       " 'Article-I.D.:',\n",
       " 'shelley.1qvfo9INNc3s',\n",
       " 'Organization:',\n",
       " 'University',\n",
       " 'of',\n",
       " 'Washington',\n",
       " 'Lines:',\n",
       " '11',\n",
       " 'NNTP-Posting-Host:',\n",
       " 'carson.u.washington.edu',\n",
       " 'A',\n",
       " 'fair',\n",
       " 'number',\n",
       " 'of',\n",
       " 'brave',\n",
       " 'souls',\n",
       " 'who',\n",
       " 'upgraded',\n",
       " 'their',\n",
       " 'SI',\n",
       " 'clock',\n",
       " 'oscillator',\n",
       " 'have',\n",
       " 'shared',\n",
       " 'their',\n",
       " 'experiences',\n",
       " 'for',\n",
       " 'this',\n",
       " 'poll.',\n",
       " 'Please',\n",
       " 'send',\n",
       " 'a',\n",
       " 'brief',\n",
       " 'message',\n",
       " 'detailing',\n",
       " 'your',\n",
       " 'experiences',\n",
       " 'with',\n",
       " 'the',\n",
       " 'procedure.',\n",
       " 'Top',\n",
       " 'speed',\n",
       " 'attained,',\n",
       " 'CPU',\n",
       " 'rated',\n",
       " 'speed,',\n",
       " 'add',\n",
       " 'on',\n",
       " 'cards',\n",
       " 'and',\n",
       " 'adapters,',\n",
       " 'heat',\n",
       " 'sinks,',\n",
       " 'hour',\n",
       " 'of',\n",
       " 'usage',\n",
       " 'per',\n",
       " 'day,',\n",
       " 'floppy',\n",
       " 'disk',\n",
       " 'functionality',\n",
       " 'with',\n",
       " '800',\n",
       " 'and',\n",
       " '1.4',\n",
       " 'm',\n",
       " 'floppies',\n",
       " 'are',\n",
       " 'especially',\n",
       " 'requested.',\n",
       " 'I',\n",
       " 'will',\n",
       " 'be',\n",
       " 'summarizing',\n",
       " 'in',\n",
       " 'the',\n",
       " 'next',\n",
       " 'two',\n",
       " 'days,',\n",
       " 'so',\n",
       " 'please',\n",
       " 'add',\n",
       " 'to',\n",
       " 'the',\n",
       " 'network',\n",
       " 'knowledge',\n",
       " 'base',\n",
       " 'if',\n",
       " 'you',\n",
       " 'have',\n",
       " 'done',\n",
       " 'the',\n",
       " 'clock',\n",
       " 'upgrade',\n",
       " 'and',\n",
       " \"haven't\",\n",
       " 'answered',\n",
       " 'this',\n",
       " 'poll.',\n",
       " 'Thanks.',\n",
       " 'Guy',\n",
       " 'Kuo',\n",
       " '<guykuo@u.washington.edu>']"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[\"text\"].loc[1].split()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>text</th>\n",
       "      <th>num_char</th>\n",
       "      <th>num_words</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>From: lerxst@wam.umd.edu (where's my thing)\\nS...</td>\n",
       "      <td>716</td>\n",
       "      <td>123</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>From: guykuo@carson.u.washington.edu (Guy Kuo)...</td>\n",
       "      <td>857</td>\n",
       "      <td>123</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>From: twillis@ec.ecn.purdue.edu (Thomas E Will...</td>\n",
       "      <td>1980</td>\n",
       "      <td>339</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>From: jgreen@amber (Joe Green)\\nSubject: Re: W...</td>\n",
       "      <td>814</td>\n",
       "      <td>113</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>From: jcm@head-cfa.harvard.edu (Jonathan McDow...</td>\n",
       "      <td>1117</td>\n",
       "      <td>171</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                text  num_char  num_words\n",
       "0  From: lerxst@wam.umd.edu (where's my thing)\\nS...       716        123\n",
       "1  From: guykuo@carson.u.washington.edu (Guy Kuo)...       857        123\n",
       "2  From: twillis@ec.ecn.purdue.edu (Thomas E Will...      1980        339\n",
       "3  From: jgreen@amber (Joe Green)\\nSubject: Re: W...       814        113\n",
       "4  From: jcm@head-cfa.harvard.edu (Jonathan McDow...      1117        171"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['num_words'] = df['text'].str.split().str.len()\n",
    "\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>text</th>\n",
       "      <th>num_char</th>\n",
       "      <th>num_words</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>From: lerxst@wam.umd.edu (where's my thing)\\nS...</td>\n",
       "      <td>716</td>\n",
       "      <td>123</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>From: guykuo@carson.u.washington.edu (Guy Kuo)...</td>\n",
       "      <td>857</td>\n",
       "      <td>123</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>From: twillis@ec.ecn.purdue.edu (Thomas E Will...</td>\n",
       "      <td>1980</td>\n",
       "      <td>339</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>From: jgreen@amber (Joe Green)\\nSubject: Re: W...</td>\n",
       "      <td>814</td>\n",
       "      <td>113</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>From: jcm@head-cfa.harvard.edu (Jonathan McDow...</td>\n",
       "      <td>1117</td>\n",
       "      <td>171</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                text  num_char  num_words\n",
       "0  From: lerxst@wam.umd.edu (where's my thing)\\nS...       716        123\n",
       "1  From: guykuo@carson.u.washington.edu (Guy Kuo)...       857        123\n",
       "2  From: twillis@ec.ecn.purdue.edu (Thomas E Will...      1980        339\n",
       "3  From: jgreen@amber (Joe Green)\\nSubject: Re: W...       814        113\n",
       "4  From: jcm@head-cfa.harvard.edu (Jonathan McDow...      1117        171"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# same but removing trailing white spaces\n",
    "df['num_words'] = df['text'].str.strip().str.split().str.len()\n",
    "\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Determine vocabulary"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>text</th>\n",
       "      <th>num_char</th>\n",
       "      <th>num_words</th>\n",
       "      <th>num_vocab</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>From: lerxst@wam.umd.edu (where's my thing)\\nS...</td>\n",
       "      <td>716</td>\n",
       "      <td>123</td>\n",
       "      <td>96</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>From: guykuo@carson.u.washington.edu (Guy Kuo)...</td>\n",
       "      <td>857</td>\n",
       "      <td>123</td>\n",
       "      <td>103</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>From: twillis@ec.ecn.purdue.edu (Thomas E Will...</td>\n",
       "      <td>1980</td>\n",
       "      <td>339</td>\n",
       "      <td>220</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>From: jgreen@amber (Joe Green)\\nSubject: Re: W...</td>\n",
       "      <td>814</td>\n",
       "      <td>113</td>\n",
       "      <td>97</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>From: jcm@head-cfa.harvard.edu (Jonathan McDow...</td>\n",
       "      <td>1117</td>\n",
       "      <td>171</td>\n",
       "      <td>140</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                text  num_char  num_words  \\\n",
       "0  From: lerxst@wam.umd.edu (where's my thing)\\nS...       716        123   \n",
       "1  From: guykuo@carson.u.washington.edu (Guy Kuo)...       857        123   \n",
       "2  From: twillis@ec.ecn.purdue.edu (Thomas E Will...      1980        339   \n",
       "3  From: jgreen@amber (Joe Green)\\nSubject: Re: W...       814        113   \n",
       "4  From: jcm@head-cfa.harvard.edu (Jonathan McDow...      1117        171   \n",
       "\n",
       "   num_vocab  \n",
       "0         96  \n",
       "1        103  \n",
       "2        220  \n",
       "3         97  \n",
       "4        140  "
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['num_vocab'] = df['text'].str.split().apply(set).str.len()\n",
    "\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>text</th>\n",
       "      <th>num_char</th>\n",
       "      <th>num_words</th>\n",
       "      <th>num_vocab</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>From: lerxst@wam.umd.edu (where's my thing)\\nS...</td>\n",
       "      <td>716</td>\n",
       "      <td>123</td>\n",
       "      <td>93</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>From: guykuo@carson.u.washington.edu (Guy Kuo)...</td>\n",
       "      <td>857</td>\n",
       "      <td>123</td>\n",
       "      <td>99</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>From: twillis@ec.ecn.purdue.edu (Thomas E Will...</td>\n",
       "      <td>1980</td>\n",
       "      <td>339</td>\n",
       "      <td>219</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>From: jgreen@amber (Joe Green)\\nSubject: Re: W...</td>\n",
       "      <td>814</td>\n",
       "      <td>113</td>\n",
       "      <td>96</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>From: jcm@head-cfa.harvard.edu (Jonathan McDow...</td>\n",
       "      <td>1117</td>\n",
       "      <td>171</td>\n",
       "      <td>139</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                text  num_char  num_words  \\\n",
       "0  From: lerxst@wam.umd.edu (where's my thing)\\nS...       716        123   \n",
       "1  From: guykuo@carson.u.washington.edu (Guy Kuo)...       857        123   \n",
       "2  From: twillis@ec.ecn.purdue.edu (Thomas E Will...      1980        339   \n",
       "3  From: jgreen@amber (Joe Green)\\nSubject: Re: W...       814        113   \n",
       "4  From: jcm@head-cfa.harvard.edu (Jonathan McDow...      1117        171   \n",
       "\n",
       "   num_vocab  \n",
       "0         93  \n",
       "1         99  \n",
       "2        219  \n",
       "3         96  \n",
       "4        139  "
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# setting charaters to lower case before counting unique words\n",
    "\n",
    "df['num_vocab'] = df['text'].str.lower().str.split().apply(set).str.len()\n",
    "\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Lexical diversity"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>text</th>\n",
       "      <th>num_char</th>\n",
       "      <th>num_words</th>\n",
       "      <th>num_vocab</th>\n",
       "      <th>lexical_div</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>From: lerxst@wam.umd.edu (where's my thing)\\nS...</td>\n",
       "      <td>716</td>\n",
       "      <td>123</td>\n",
       "      <td>93</td>\n",
       "      <td>1.322581</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>From: guykuo@carson.u.washington.edu (Guy Kuo)...</td>\n",
       "      <td>857</td>\n",
       "      <td>123</td>\n",
       "      <td>99</td>\n",
       "      <td>1.242424</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>From: twillis@ec.ecn.purdue.edu (Thomas E Will...</td>\n",
       "      <td>1980</td>\n",
       "      <td>339</td>\n",
       "      <td>219</td>\n",
       "      <td>1.547945</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>From: jgreen@amber (Joe Green)\\nSubject: Re: W...</td>\n",
       "      <td>814</td>\n",
       "      <td>113</td>\n",
       "      <td>96</td>\n",
       "      <td>1.177083</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>From: jcm@head-cfa.harvard.edu (Jonathan McDow...</td>\n",
       "      <td>1117</td>\n",
       "      <td>171</td>\n",
       "      <td>139</td>\n",
       "      <td>1.230216</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                text  num_char  num_words  \\\n",
       "0  From: lerxst@wam.umd.edu (where's my thing)\\nS...       716        123   \n",
       "1  From: guykuo@carson.u.washington.edu (Guy Kuo)...       857        123   \n",
       "2  From: twillis@ec.ecn.purdue.edu (Thomas E Will...      1980        339   \n",
       "3  From: jgreen@amber (Joe Green)\\nSubject: Re: W...       814        113   \n",
       "4  From: jcm@head-cfa.harvard.edu (Jonathan McDow...      1117        171   \n",
       "\n",
       "   num_vocab  lexical_div  \n",
       "0         93     1.322581  \n",
       "1         99     1.242424  \n",
       "2        219     1.547945  \n",
       "3         96     1.177083  \n",
       "4        139     1.230216  "
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['lexical_div'] = df['num_words'] / df['num_vocab']\n",
    "\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Average words length"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>text</th>\n",
       "      <th>num_char</th>\n",
       "      <th>num_words</th>\n",
       "      <th>num_vocab</th>\n",
       "      <th>lexical_div</th>\n",
       "      <th>ave_word_length</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>From: lerxst@wam.umd.edu (where's my thing)\\nS...</td>\n",
       "      <td>716</td>\n",
       "      <td>123</td>\n",
       "      <td>93</td>\n",
       "      <td>1.322581</td>\n",
       "      <td>5.821138</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>From: guykuo@carson.u.washington.edu (Guy Kuo)...</td>\n",
       "      <td>857</td>\n",
       "      <td>123</td>\n",
       "      <td>99</td>\n",
       "      <td>1.242424</td>\n",
       "      <td>6.967480</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>From: twillis@ec.ecn.purdue.edu (Thomas E Will...</td>\n",
       "      <td>1980</td>\n",
       "      <td>339</td>\n",
       "      <td>219</td>\n",
       "      <td>1.547945</td>\n",
       "      <td>5.840708</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>From: jgreen@amber (Joe Green)\\nSubject: Re: W...</td>\n",
       "      <td>814</td>\n",
       "      <td>113</td>\n",
       "      <td>96</td>\n",
       "      <td>1.177083</td>\n",
       "      <td>7.203540</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>From: jcm@head-cfa.harvard.edu (Jonathan McDow...</td>\n",
       "      <td>1117</td>\n",
       "      <td>171</td>\n",
       "      <td>139</td>\n",
       "      <td>1.230216</td>\n",
       "      <td>6.532164</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                text  num_char  num_words  \\\n",
       "0  From: lerxst@wam.umd.edu (where's my thing)\\nS...       716        123   \n",
       "1  From: guykuo@carson.u.washington.edu (Guy Kuo)...       857        123   \n",
       "2  From: twillis@ec.ecn.purdue.edu (Thomas E Will...      1980        339   \n",
       "3  From: jgreen@amber (Joe Green)\\nSubject: Re: W...       814        113   \n",
       "4  From: jcm@head-cfa.harvard.edu (Jonathan McDow...      1117        171   \n",
       "\n",
       "   num_vocab  lexical_div  ave_word_length  \n",
       "0         93     1.322581         5.821138  \n",
       "1         99     1.242424         6.967480  \n",
       "2        219     1.547945         5.840708  \n",
       "3         96     1.177083         7.203540  \n",
       "4        139     1.230216         6.532164  "
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['ave_word_length'] = df['num_char'] / df['num_words']\n",
    "\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## There is more...\n",
    "\n",
    "Let's explore how the distribution of the created features varies across the different topics the text refers to."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['alt.atheism',\n",
       " 'comp.graphics',\n",
       " 'comp.os.ms-windows.misc',\n",
       " 'comp.sys.ibm.pc.hardware',\n",
       " 'comp.sys.mac.hardware',\n",
       " 'comp.windows.x',\n",
       " 'misc.forsale',\n",
       " 'rec.autos',\n",
       " 'rec.motorcycles',\n",
       " 'rec.sport.baseball',\n",
       " 'rec.sport.hockey',\n",
       " 'sci.crypt',\n",
       " 'sci.electronics',\n",
       " 'sci.med',\n",
       " 'sci.space',\n",
       " 'soc.religion.christian',\n",
       " 'talk.politics.guns',\n",
       " 'talk.politics.mideast',\n",
       " 'talk.politics.misc',\n",
       " 'talk.religion.misc']"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# topics discussed in the articles\n",
    "\n",
    "data.target_names                                               "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x864 with 20 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "df['target'] = data.target\n",
    "\n",
    "def plot_features(df, text_var):\n",
    "\n",
    "    # function plots 9 images\n",
    "    nb_rows = 5\n",
    "    nb_cols = 4\n",
    "    \n",
    "    fig, axs = plt.subplots(nb_rows, nb_cols, figsize=(12, 12))\n",
    "    plt.subplots_adjust(wspace=None, hspace=0.4)\n",
    "\n",
    "    n = 0\n",
    "    for i in range(0, nb_rows):\n",
    "        for j in range(0, nb_cols):\n",
    "            axs[i, j].hist(df[df.target==n][text_var], bins=30)\n",
    "            axs[i, j].set_title(text_var + ' | ' + str(n))\n",
    "            n += 1\n",
    "    plt.show()\n",
    "    \n",
    "plot_features(df, 'num_words')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "fsml",
   "language": "python",
   "name": "fsml"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.5"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {
    "height": "calc(100% - 180px)",
    "left": "10px",
    "top": "150px",
    "width": "235.467px"
   },
   "toc_section_display": "block",
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
